不使用运算符 + 和 - ,计算两整数 a 、b 之和。
示例 1:
输入: a = 1, b = 2
输出: 3
示例 2:
输入: a = -2, b = 3
输出: 1
一开始看到这个两数相加我笑了,无非是return a+b
嘛,但是看到不使用运算符+
和-
的时候我蒙圈了,?!,纳尼?
于是我试着提交了一下return a+b
居然过了哈哈哈哈
算了不耍无赖,正经看题,不准用+
和-
,那就只能用位运算了呗
5 = 101
3 = 011
2 = 010
需要找到一种位运算,在不进位的情况下满足1?1=0,1?0=1,0?0=0
这个运算符就是xor
,然后考虑进位的问题
如果是进位的话,考虑一下情况
7 = 111
7 = 111
14 = 1110
使用xor
得到的结果111 xor 111 = 0
,而``111 and 111 = 111`,所以,a+b = (a xor b)+(a&b << 1)
写个迭代试试
1 | def getSum(a,b): |
然而出现了一个问题,python里面计算负数出了问题
我试着输出一下python里面负数的表示
print(hex(-1))
发现出来的结果是'-0x1'
没有说是类似FFFFFFFF
的表达
于是查找题解,发现python是需要模拟32位溢出的情况,魔改代码如下
1 | def getSum(a,b): |
后来又发现python
这个弄出来全部都是无符号整数 然后强制转化成带符号整数进行输出就可以了